import path from 'path'
import { Configuration } from 'log4js'
import { IS_DEV, ROOT_PATH } from '@/constants'

// 通用的日志文件配置
const commonDateFileConfig = {
  type: 'dateFile',
  maxLogSize: +(process.env.LOG_MAX_SIZE || 10485760), // 10MB
  backups: +(process.env.LOG_MAX_BACKUP_COUNT || 3), // 保留备份文件的数量
  pattern: 'yyyy-MM-dd',
  keepFileExt: true,
  alwaysIncludePattern: true,
  compress: process.env.LOG_COMPRESS === 'true'
}

// Log4js 配置
const log4jsConfig: Configuration = {
  appenders: {
    // 控制台输出
    stdout: { type: 'stdout', layout: { type: 'coloured' } },
    // HTTP 访问日志输出 包含请求、响应和异常信息
    access: { ...commonDateFileConfig, filename: path.join(ROOT_PATH, 'logs/http/access.log'), category: 'http' },
    // 异常文件输出
    errorFile: { ...commonDateFileConfig, filename: path.join(ROOT_PATH, 'logs/error/errors.log') },
    // 只记录 HTTP 访问 error 级别日志
    errors: { type: 'logLevelFilter', level: 'error', appender: 'errorFile' }
  },
  categories: {
    // 默认日志记录器配置 - 输出到控制台和文件, 开发环境输出 trace 及以上级别日志
    default: { appenders: ['access', 'errors'], level: process.env.LOG_LEVEL || 'trace', enableCallStack: IS_DEV },
    // 控制台日志记录器配置 - 输出到控制台
    console: { appenders: ['stdout'], level: process.env.LOG_LEVEL || 'trace', enableCallStack: IS_DEV }
  }
}

export default log4jsConfig
